Princip asymetrického šifrování, který si zde vysvětlíme a prakticky aplikujeme se používá na mnoha místech v digitálním světě. Zde je několik příkladů, kde se tento princip uplatňuje. Některé z nich běžně používáte aniž byste tušili, "že tam jsou":
SSL/TLS (Secure Sockets Layer / Transport Layer Security) – Používá se pro zabezpečení komunikace mezi webovým prohlížečem a serverem (např. při přístupu na webové stránky pomocí HTTPS). Asymetrická šifrování zajistí bezpečný přenos symetrického klíče, který se pak používá pro rychlé šifrování samotné komunikace.
E-mailová šifrování (PGP - Pretty Good Privacy) – Umožňuje uživatelům šifrovat a podepisovat e-maily. PGP používá asymetrickou šifru, aby zajistilo, že pouze zamýšlený příjemce (s odpovídajícím soukromým klíčem) může e-mail dešifrovat.
Digitální podpisy – Používají se k ověření autenticity a integrity zpráv či dokumentů. Digitální podpis je vytvořen pomocí soukromého klíče, a kdokoli s veřejným klíčem může ověřit, zda je podpis pravý a zda dokument nebyl změněn.
Kryptoměny (např. Bitcoin) – Asymetrické šifrování zajišťuje zabezpečení transakcí. Každý uživatel má dvojici klíčů, z nichž jeden je soukromý (pro podepisování transakcí) a druhý veřejný (pro ověření těchto podpisů).
VPN (Virtual Private Network) – VPN často používají asymetrické šifrování k bezpečnému nastavení spojení mezi uživatelem a VPN serverem, čímž se zajišťuje soukromí a bezpečnost přenášených dat.
Tyto příklady ukazují, jak široké je použití asymetrického šifrování v moderních technologiích.
Pro autentizaci uživatele vzdálenému systému se běžně používá kombinace dvou údajů: jména a hesla. Pokud heslo, které uživatel pošle spolu s uživatelským jménem, je heslo, které má server u daného uživatele uložené v databázi hesel, uživatel je autentizován.
Funguje to tak, že heslo se v klientském počítači zahashuje (vytvoří se jeho otisk příslušným algoritmem dané distribuce (MD5, openssl, yescrypt...) a tento otisk se odešle na server. Tam systém zkontroluje, zda je otisk stejný s tím, který má u uživatele uložený. Pokud otisky souhlasí, je uživatel autentizován.
heslo123$1$paVUKk5s$Fb2pH/Zwn2v1XXDNbO5/Ns/U těchto šifrovacích algoritmů platí dvě pravidla:
Používání SSH klíčů je bezpečný způsob autentizace ke vzdálenému serveru. SSH klíč je číslo o délce několika kilobitů. Jedná se o kryptografický prostředek, který se skládá ze dvou částí:
Shrnuto: Veřejný klíč nahrajeme na vzdálený server, soukromý si necháme u sebe na lokálním počítači (a důkladně jej chráníme před odcizením).
Je to v zásadě velmi prosté. Server musí mít k dispozici veřejný klíč osoby, která má právo být systémem ověřena. Pomocí tohoto klíče zašifruje tzv. "výzvu" (blok náhodných dat) pro klienta, který pomocí privátního klíče prokáže, je-li schopen tuto výzvu správně dešifrovat.
Pokud server obdrží od klienta správně dešifrovanou výzvu, ověří tím, že klient má k dispozici příslušný privátní klíč a ověří jej. V opačném případě mu je přístup odepřen.
Výhodou je, že privátní klíč ani heslo se během tohoto procesu ověřování sítí neposílá.
Proč je klíč lepší než heslo:
Proč je klíč horší než heslo:
Poznámka: současná doporučení radí generovat klíč s délkou 4096 bitů namísto "pouhých" 2048 bitů. Důvod je prostý: současný výpočetní výkon farem grafických karet je gigantický. Těřaři kryptoměn by mohli vyprávět.
FAQ: občas slyším: "Bojím se to vyzkoušet. Nemůžu si tím např. zablokovat přístup na server?" Odpověď zní: v žádném případě ne. Možnost přihlašování heslem zůstane vždy aktivní.
V příkazovém řádku Windows (nebo terminálu macOS/Linux) zadejte následující příkaz (nám na ukázku postačí délka 2048 bitů):
ssh-keygen -t rsa -b 2048
Všechny dotazy stačí „odentrovat“ (pro zvýšení ochrany je možné privátní klíč chránit heslem – my se obejdeme bez něj):
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\machac/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\machac/.ssh/id_rsa.
Your public key has been saved in C:\Users\machac/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:7fIrCNcQ4xl1pDa7XM5swLjDgRlwveEt5giAuzT+TSE machac@PC
The key's randomart image is:
+---[RSA 2048]----+
|=.B+. |
|.Xoo.o |
|oo.+* . |
|.+o+ o oS.. |
| .o * + =. |
| .o X ..+. |
| .o + oo |
| .. . .o. |
+----[SHA256]-----+
Ve složce
C:\users\<jmeno>\.ssh\
se vytvořily dva soubory (klíče) ve formátu OpenSSH:
id_rsaid_rsa.pubOba klíče jsou prosté textové soubory obsahující pouze alfanumerické znaky.
Všimněte si, že tečka u
.sshnemá ve Windows význam "skrytý".
Obsah souboru id_rsa.pub potřebujeme uložit do souboru ~/.ssh/authorized_keys na TuXovi. Část provedeme v místním terminálu, dokončíme na TuXovi:
(1) Příkazy v PowerShellu Windows:
$ ssh 10XPrijmeniJ@tux.panska.cz "mkdir -p ~/.ssh"
$ cd .ssh
$ scp .\id_rsa.pub 10XPrijmeniJ@tux.panska.cz:~/.ssh
(2) Příkazy v terminálu TuXe (po přihlášení):
$ cd .ssh
$ cat id_rsa.pub >> authorized_keys
$ chmod 600 authorized_keys
$ cat authorized_keys
$ rm id_rsa.pub
Před testem funkčnosti se ze serveru odhlaste:
$ logout
a vyzkoušejte se přihlásit pomocí klíčů (bez hesla):
ssh 10XPrijmeniJ@tux.panska.cz
Pokud jste neudělali chybu v nastavení, systém vás přihlásí bez nutnosti zadávat heslo.
tux.bat Pro snazší spouštění na Windows si můžete např. na Ploše vytvořit tzv. dávkový soubor s názvem např. tux.bat, do kterého zapíšete příkaz:
ssh 10XPrijmeniJ@tux.panska.cz
Na server se připojíte jednoduše poklepáním na tento soubor.
K vytvoření stačí Poznámkový blok, kde při ukládání zvolíte "Všechny soubory (*.*)" a jako název zadáte
tux.bat. Jinak si uložíte soubor s názvemtux.bat.txt.Pozn: "Dávkový soubor" je prostý textový soubor s příponou
.bat. V Linuxu je tomu říká "skript".
Pokud se chcete i doma přihlašovat bez hesla, stačí si soubor s privátním klíčem id_rsa přenést do tohoto počítače a uložit ho do stejné složky:
C:\Users\<jmeno>\.ssh\id_rsa/Users/<jmeno>/.ssh/id_rsa/home/<jmeno>/.ssh/id_rsaPokud vám přihlašování klíčem nefunguje, např.:
smažte soubor known_hosts ve svém profilu:
C:\Users\<jmeno>\.ssh\known_hosts
Tím se "resetují" všechna dříve uložená (ověřená) spojení.